package com.atgouwu.aiparent.springai.controller;

import jakarta.annotation.Resource;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.openai.OpenAiChatModel;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

/**
 * 整合OpenAI：
 */
@RestController
@RequestMapping("/openai")
public class OpenAiController {
    private final ChatClient chatClient;

    public OpenAiController(ChatClient.Builder chatClientBuilder) { //构造器注入（推荐）
        this.chatClient = chatClientBuilder.build();
    }

    /**
     * http://localhost:9001/openai/chat?prompt=介绍一下你自己
     */
    @GetMapping("/chat")
    public String chat(@RequestParam String message) {
        return chatClient.prompt()
                .user(message)  //用户消息
                .call()  //同步调用
                .content();  //直接获取响应内容（字符串）
    }

    /**
     * http://localhost:9001/openai/multi-turn?prompt=介绍一下你自己
     */
    @GetMapping("/multi-turn")
    public String multiTurnChat(@RequestParam String message, @RequestParam(required = false) String history) {
        String promptContent = String.format("""
                历史对话：%s
                用户当前消息：%s
                """, history, message);
        return chatClient.prompt()
                .system("你是一个 helpful 的助手，基于历史对话回答用户问题")  //系统提示（可选）
                .user(promptContent)
                .call()
                .content();
    }

    @Resource
    private OpenAiChatModel chatModel;

    /**
     * http://localhost:9001/openai/chatgpt?prompt=介绍一下你自己
     */
    @GetMapping("/chatgpt")
    public String chatgpt(@RequestParam(value = "prompt", defaultValue = "Tell me a joke") String prompt) {
        if (!StringUtils.hasLength(prompt)) {
            return "请先输入信息！";
        }
        return chatModel.call(prompt);
    }

}
